package com.dlyk.service.impl;

import com.dlyk.constant.Constants;
import com.dlyk.mapper.TranRemarkMapper;
import com.dlyk.model.TranRemark;
import com.dlyk.model.User;
import com.dlyk.query.BaseQuery;
import com.dlyk.query.TranRemarkQuery;
import com.dlyk.service.TranRemarkService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class TranRemarkServiceImpl implements TranRemarkService {

    @Resource
    private TranRemarkMapper tranRemarkMapper;

    /**
     * 添加交易备注
     */
    @Override
    public int addTranRemark(TranRemarkQuery tranRemarkQuery) {

        TranRemark tranRemark = new TranRemark();

        // 使用BeanUtils工具将前端传递的参数转成TranRemarkQuery类型
        BeanUtils.copyProperties(tranRemarkQuery, tranRemark);

        // 获取创建者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置创建者
        tranRemark.setCreateBy(loginUser.getId());
        // 设置创建时间
        tranRemark.setCreateTime(new Date());
        // 设置删除状态（0正常，1删除）
        tranRemark.setDeleted(0);

        return tranRemarkMapper.insertSelective(tranRemark);
    }

    /**
     * 加载交易备注列表（分页查询）
     */
    @Override
    public PageInfo<TranRemark> getTranRemarkListByPage(Integer current) {

        // 1、设置PageHelper
        PageHelper.startPage(current, Constants.PAGE_SIZE);

        // 2、查询
        List<TranRemark> tranRemarkList = tranRemarkMapper.selectTranRemarkListByPage();

        // 3、封装分页数据到PageInfo
        PageInfo<TranRemark> tranRemarkPageInfo = new PageInfo<>(tranRemarkList);

        return tranRemarkPageInfo;
    }

    /**
     * 编辑交易备注
     */
    @Override
    public int editTranRemark(TranRemarkQuery tranRemarkQuery) {

        TranRemark tranRemark = new TranRemark();

        // 设置要修改的内容
        tranRemark.setId(tranRemarkQuery.getId());
        tranRemark.setNoteContent(tranRemarkQuery.getNoteContent());

        return tranRemarkMapper.updateByPrimaryKeySelective(tranRemark);
    }

    /**
     * 删除交易备注（逻辑删除）
     */
    @Override
    public int removeTranRemarkById(Integer id) {

        // 逻辑删除，不需要删除这条数据，只需要修改删除标识即可

        TranRemark tranRemark = new TranRemark();
        tranRemark.setId(id);
        // 将删除标识设置为1，标识已删除
        tranRemark.setDeleted(1);

        // 修改交易备注
        return tranRemarkMapper.updateByPrimaryKeySelective(tranRemark);
    }

}

